package smallfrench.moteur.interp.err;

/**
 * Décrit une classe pouvant traiter un type d'erreur.
 * 
 * @author antoine1023
 *
 */
public abstract class IntercepteurErreur {

	protected final Class<?> classeInterceptable;

	public IntercepteurErreur (Class<?> classeInterceptable) {
		this.classeInterceptable = classeInterceptable;
	}

	public final void intercepter(Object erreur) {
		if (classeInterceptable.isInstance(erreur))
			intercepterImpl(erreur);
		else
			throw new ClassCastException(erreur.getClass() +
					" n'est pas un(e) " + classeInterceptable);
	}

	protected abstract void intercepterImpl(Object erreur);

	public final boolean peutIntercepter(Class<?> classe) {
		return classeInterceptable.isAssignableFrom(classe);
	}

}
